package org.chnxi.study.datastructrues.hash;

/**
 * 存放员工的链表
 */
public class EmpLinkedList {

    //头指针
    private Emp head;

    /**
     * 假定：当添加雇员时，ID是自增长的，ID的分配总是从小到大
     * 因此我们将该雇员，直接加入到链表的最后一个即可
     * @param emp
     */
    public void add(Emp emp){
        //如果是添加第一个
        if(head == null){
            head = emp;
            return;
        }

        //如果不是添加第一个
        Emp tmp = head;
        while(true){
            if(tmp.getNext() == null){
                break;
            }
            tmp = tmp.getNext();
        }
        tmp.setNext(emp);
    }

    public void list(int num){
        if(head == null){
            System.out.println("第"+num+"条链表为空");
            return;
        }

        System.out.println("第"+num+"条链表的信息为：");
        Emp tmp = head;
        while(true){
            System.out.println("id="+tmp.getId()+";name="+tmp.getName()+";address="+tmp.getAddress());
            if(tmp.getNext() == null){
                break;
            }
            tmp = tmp.getNext();
        }
    }

    /**
     * 根据员工ID查找
     * @param id
     * @return 如果没找到返回null
     */
    public Emp findEmpById(int id){
        if(head == null){
            return null;
        }

        Emp tmp = head;
        while(true){
            if(tmp.getId() == id){
                break;
            }
            if(tmp.getNext() == null){
                tmp = null;
                break;
            }
            tmp = tmp.getNext();
        }

        return tmp;
    }

    /**
     * 根据ID删除员工
     * @param id
     */
    public void delEmpById(int id){
        if(head == null){
            return;
        }

        if(head.getId() == id){
            head = head.getNext();
            return;
        }

        Emp preEmp = head;
        Emp tmp = head.getNext();

        while(true){
            if(tmp == null){
                break;
            }

            if(tmp.getId() == id){
                //找到
                preEmp.setNext(tmp.getNext());
                break;
            }

            tmp = tmp.getNext();
            preEmp = preEmp.getNext();
        }
    }
}
